上兩篇中我們在介紹 Go 網路的操作中,有稍微提到 json 格式,那這篇將介紹有關何為 json,以及 Go 語言裡如何處理此格。json 為 JavaScript Object Notation 的簡稱,此為 JavaScript 物件的標準格式。常用於網站上的資料呈現與傳輸,以純文字去儲存和傳送結構資料。雖然是 JavaScript 的,但是其他語言也支援解析 json,當然也包含 Go 語言,而作為後端工程師的話,你會常常遇到 json 格式。我們稍微看一下格式長得怎樣:
json 為 JavaScript Object Notation 的簡稱,此為 JavaScript 物件的標準格式。常用於網站上的資料呈現與傳輸,以純文字去儲存和傳送結構資料。雖然是 JavaScript 的,但是其他語言也支援解析 json,當然也包含 Go 語言,而作為後端工程師的話,你會常常遇到 json 格式。我們稍微看一下格式長得怎樣:
{
"class" : "A" ,
"persons" : [
{"id" : 1 , "name" : "JC"},
{"id" : 2 , "name" : "Eric"},
{"id" : 3 , "name" : "Zhen"}
]
}
Go 語言中的 encoding/json 套件,提供了函式 json.Unmarshal 可以把 json 字串轉成 struct,而 json.Marshal 可以將 struct 轉成 json 字串,以下我直接示範一個範例:
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int64 `json:"id"`
Name string `json:name`
}
func main() {
data := []byte(`{"id" : 1 , "name" : "JC"}`)
var student Student
json.Unmarshal(data, &student)
fmt.Println(student)
jsondata, _ := json.Marshal(student)
fmt.Println(string(jsondata))
}
上面程式,我們宣告一個名為 Student 的 struct,裡面包含兩個結構,且與之前不太一樣的是,你必須告訴他,struct 的 key 對應到的 json 格式的 key 為何,如此一來,你就可以使用 Unmarshal 和 Marshal 來對 json 和 struct 做轉換。
而你的 json 可能會比較複雜,或許會包含一些 array,這時你就要去宣吿子母 struct,以下示範一個例子:
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int64 `json:"id"`
Name string `json:name`
}
type Class struct {
Class string `json:"class"`
Students []Student `json:students"`
}
func main() {
data := []byte(`{"class" : "A", "students" : [{"id" : 1 , "name" : "JC"}, {"id" : 2 , "name" : "Zhen"}]}`)
var class Class
json.Unmarshal(data, &class)
fmt.Println(class)
jsondata, _ := json.Marshal(class)
fmt.Println(string(jsondata))
}
你可以以自己的需求去設計 struct,去達到解析 json 的功能!
處理 json 是後端工程師幾乎都會遇到的課題,而在 Go 語言中提供很方便的套件,讓你可以在 json 和 struct 之間作轉換,只是在設計 struct 要多費心。謝謝各位讀者今天的閱讀,希望今天的講解對你有幫助!